/**
 * 系统配置文件 - 统一管理项目配置常量
 * 重新设计：提供前缀获取函数，让各service文件自行获取所需前缀
 */

import { userInfo } from "@/stores/user";

// ==================== 基础配置 ====================
export const IS_MICRO = false;                                    // 是否为微服务架构
export const baseURL = 'http://192.168.1.58:9999';               // 后端API基础地址
export const AI_BASE_URL = 'http://192.168.1.58:8085';           // AI服务基础地址
export const SECRET_KEY = 'thanks,pig4cloud';                     // 密码加密密钥
export const OAUTH2_CLIENT = 'custom:custom';                     // OAuth2客户端信息
export const FORM_CONTENT_TYPE = 'application/x-www-form-urlencoded';





/**
 * 生成OAuth2 Basic认证头
 * @returns Basic认证字符串
 */
export const generateBasicAuth = (): string => {
  const clientInfo = OAUTH2_CLIENT;
	// 使用兼容小程序的方式进行Base64编码
	const uint8Array = new Uint8Array(clientInfo.length);
	for (let i = 0; i < clientInfo.length; i++) {
		uint8Array[i] = clientInfo.charCodeAt(i);
	}
	const arrayBuffer = uint8Array.buffer as ArrayBuffer;
	return 'Basic ' + uni.arrayBufferToBase64(arrayBuffer);
};

function getBasicAuth(basicAuth : string) {
	// 获取用户信息
	//1.如果没有登录，那么basicAuth开头是Basic
	if (!userInfo.value?.basicAuth) {
		const model = 'custom:custom'
		// 使用兼容小程序的方式替代TextEncoder
		// 创建一个长度为model.length的Uint8Array
		const uint8Array = new Uint8Array(model.length);
		// 手动编码字符串
		for (let i = 0; i < model.length; i++) {
			uint8Array[i] = model.charCodeAt(i);
		}
		const arrayBuffer = uint8Array.buffer as ArrayBuffer
		return 'Basic ' + uni.arrayBufferToBase64(arrayBuffer)
	} else {
		//2.如果已经登录，那么basicAuth开头是Bearer
		return `${userInfo.value?.basicAuth}`

	}
}



// ==================== 前缀获取函数 ====================
/**
 * 获取业务相关API前缀（考试记录、知识卡片、题目等）
 * @returns 业务API前缀
 */
export const getBusinessApiPrefix = (): string => {
  return IS_MICRO ? '/itlearn/App' : '/admin/App';
};

/**
 * 获取用户相关API前缀
 * @returns 用户API前缀
 */
export const getUserApiPrefix = (): string => {
  return IS_MICRO ? '/admin' : '/admin';
};

/**
 * 获取认证相关API前缀
 * @returns 认证API前缀
 */
export const getAuthApiPrefix = (): string => {
  return IS_MICRO ? '/auth' : '/admin';
};

/**
 * 获取通用API前缀
 * @returns 通用API前缀
 */
export const getCommonApiPrefix = (): string => {
  return IS_MICRO ? '/itlearn' : '/admin';
};

/**
 * 获取AI服务完整URL
 * @param path API路径（如 '/api/ollama/chat-with-system-stream'）
 * @returns 完整的AI服务URL
 */
export const getAiApiUrl = (path: string): string => {
  return `${AI_BASE_URL}${path}`;
};



// ==================== 配置管理函数 ====================
/**
 * 获取当前环境配置
 */
export const getEnvConfig = () => ({
  IS_MICRO,
  baseURL,
  AI_BASE_URL,
  SECRET_KEY,
  OAUTH2_CLIENT,
  mode: IS_MICRO ? '微服务模式' : '单体模式'
});

/**
 * 获取当前架构模式
 */
export const getArchitectureMode = () => IS_MICRO ? '微服务模式' : '单体模式';

// ==================== 兼容性导出 ====================
/** @deprecated 使用具体的前缀获取函数替代，如 getBusinessApiPrefix(), getUserApiPrefix() 等 */
export const API_PREFIX = getBusinessApiPrefix();

// 默认导出
export default {
  baseURL,
  AI_BASE_URL,
  FORM_CONTENT_TYPE,
  SECRET_KEY,
  OAUTH2_CLIENT,
  IS_MICRO,
  // adaptationUrl,
  getEnvConfig,
  getArchitectureMode,
  getBusinessApiPrefix,
  getUserApiPrefix,
  getAuthApiPrefix,
  getCommonApiPrefix,
  getAiApiUrl
};